jihyeon's Blog

2023-11-13

연결 요소의 개수


https://www.acmicpc.net/problem/11724

서로 연결된 요소 개수 찾기 문제

합집합(union-find) 찾기 알고리즘을 사용하여 집합의 개수를 세면 됨

import sys # 빠른 입력 함수 사용 input = sys.stdin.readline # 특정 원소가 속한 집합을 찾기 def find_parent(parent, x): # 루트 노드가 아니라면 if parent[x] != x: # 루트 노드를 찾을 때까지 재귀적으로 호출 parent[x] = find_parent(parent, parent[x]) return parent[x] # 두 원소가 속한 집합을 합치기 def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b # 정점의 개수 N과 간선의 개수 M n, m = map(int, input().split()) parent = [0] * (n + 1) # 부모 테이블 초기화하기 # 부모 테이블상에서, 부모를 자기 자신으로 초기화 for i in range(1, n + 1): parent[i] = i for i in range(m): # M은 합치기(union) 연산의 수와 동일 a, b = map(int, input().split()) union_parent(parent, a, b) # a와 b를 연결하기 counter = set() # 고유한 집합의 수 for i in range(1, n + 1): # 고유한 집합 번호를 집합에 추가 counter.add(find_parent(parent, i)) # 고유한 집합의 수 출력 print(len(counter))

Copyright (c) 2023. jihyeon Choi. | All Right Reserved.